/**
 * 
 */
package com.core.util;

import java.io.Serializable;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;

/**
 * 底层DAO接口内
 * 
 * @author laker.pan
 * 
 */
public interface GenericDAO<T, PK extends Serializable> {
	/**
	 * 查找某个实体Bean
	 * 
	 * @param id
	 * @return
	 */
	public T findById(PK id);
	
	/**
	 * 模糊查询
	 * @param dc  需要查询的对象
	 * @param firstResult 开始页
	 * @param maxResults  
	 *  			  每页显示
	 * @return
	 */
	public Pagination<T> search(DetachedCriteria dc , final int firstResult , final int maxResults);
	/**
	 * 模糊查询的总条数
	 * @param dc
	 * @return
	 */
	public Long getTotalCount(DetachedCriteria dc);

	/**
	 * 查找当前记录下的所有实体Bean
	 * 
	 * @param firstResult
	 *            开始页
	 * @param maxResults
	 *            每页显示
	 * @return
	 */
	public List<T> findAll(T query , int firstResult, int maxResults);
	
	/**
	 * 保存一个实体Bean
	 * 
	 * @param entry
	 */
	public void save(T entry);

	/**
	 * 更新一个实体Bean
	 * 
	 * @param entry
	 */
	public boolean update(T entry);

	/**
	 * 删除一个实体Bean
	 * 
	 * @param entry
	 * @return
	 */
	public boolean delete(T entry);

	/**
	 * 查找总记录数
	 * 
	 * @param condition
	 * @return
	 */
	public List<T> getCondition(T query);

	public List<T> likeBy(DetachedCriteria dc);
}
